using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Channels;

namespace SlasheneFramework.WCF
{
	public abstract class ProxyDuplexChannel : IDuplexChannel
	{
		public ProxyDuplexChannel(IDuplexChannel inner)
		{
			_InnerDuplexChannel = inner;
		}
		private readonly IDuplexChannel _InnerDuplexChannel;

		public virtual System.ServiceModel.EndpointAddress LocalAddress
		{
			get
			{
				return _InnerDuplexChannel.LocalAddress;
			}
		}
		public virtual System.ServiceModel.CommunicationState State
		{
			get
			{
				return _InnerDuplexChannel.State;
			}
		}
		public virtual System.ServiceModel.EndpointAddress RemoteAddress
		{
			get
			{
				return _InnerDuplexChannel.RemoteAddress;
			}
		}
		public virtual System.Uri Via
		{
			get
			{
				return _InnerDuplexChannel.Via;
			}
		}
		public virtual event System.EventHandler Closed
		{

			add
			{
				_InnerDuplexChannel.Closed += value;
			}

			remove
			{
				_InnerDuplexChannel.Closed -= value;
			}
		}
		public virtual event System.EventHandler Closing
		{

			add
			{
				_InnerDuplexChannel.Closing += value;
			}

			remove
			{
				_InnerDuplexChannel.Closing -= value;
			}
		}
		public virtual event System.EventHandler Faulted
		{

			add
			{
				_InnerDuplexChannel.Faulted += value;
			}

			remove
			{
				_InnerDuplexChannel.Faulted -= value;
			}
		}
		public virtual event System.EventHandler Opened
		{

			add
			{
				_InnerDuplexChannel.Opened += value;
			}

			remove
			{
				_InnerDuplexChannel.Opened -= value;
			}
		}
		public virtual event System.EventHandler Opening
		{

			add
			{
				_InnerDuplexChannel.Opening += value;
			}

			remove
			{
				_InnerDuplexChannel.Opening -= value;
			}
		}

		public virtual System.ServiceModel.Channels.Message Receive()
		{
			return _InnerDuplexChannel.Receive();
		}
		public virtual System.ServiceModel.Channels.Message Receive(System.TimeSpan timeout)
		{
			return _InnerDuplexChannel.Receive(timeout);
		}
		public virtual System.IAsyncResult BeginReceive(System.AsyncCallback callback, System.Object state)
		{
			return _InnerDuplexChannel.BeginReceive(callback, state);
		}
		public virtual System.IAsyncResult BeginReceive(System.TimeSpan timeout, System.AsyncCallback callback, System.Object state)
		{
			return _InnerDuplexChannel.BeginReceive(timeout, callback, state);
		}
		public virtual System.ServiceModel.Channels.Message EndReceive(System.IAsyncResult result)
		{
			return _InnerDuplexChannel.EndReceive(result);
		}
		public virtual System.Boolean TryReceive(System.TimeSpan timeout, out System.ServiceModel.Channels.Message message)
		{
			return _InnerDuplexChannel.TryReceive(timeout, out message);
		}
		public virtual System.IAsyncResult BeginTryReceive(System.TimeSpan timeout, System.AsyncCallback callback, System.Object state)
		{
			return _InnerDuplexChannel.BeginTryReceive(timeout, callback, state);
		}
		public virtual System.Boolean EndTryReceive(System.IAsyncResult result, out System.ServiceModel.Channels.Message message)
		{
			return _InnerDuplexChannel.EndTryReceive(result, out message);
		}
		public virtual System.Boolean WaitForMessage(System.TimeSpan timeout)
		{
			return _InnerDuplexChannel.WaitForMessage(timeout);
		}
		public virtual System.IAsyncResult BeginWaitForMessage(System.TimeSpan timeout, System.AsyncCallback callback, System.Object state)
		{
			return _InnerDuplexChannel.BeginWaitForMessage(timeout, callback, state);
		}
		public virtual System.Boolean EndWaitForMessage(System.IAsyncResult result)
		{
			return _InnerDuplexChannel.EndWaitForMessage(result);
		}
		public virtual T GetProperty<T>() where T : class
		{
			return _InnerDuplexChannel.GetProperty<T>();
		}
		public virtual void Abort()
		{
			_InnerDuplexChannel.Abort();
		}
		public virtual void Close()
		{
			_InnerDuplexChannel.Close();
		}
		public virtual void Close(System.TimeSpan timeout)
		{
			_InnerDuplexChannel.Close(timeout);
		}
		public virtual System.IAsyncResult BeginClose(System.AsyncCallback callback, System.Object state)
		{
			return _InnerDuplexChannel.BeginClose(callback, state);
		}
		public virtual System.IAsyncResult BeginClose(System.TimeSpan timeout, System.AsyncCallback callback, System.Object state)
		{
			return _InnerDuplexChannel.BeginClose(timeout, callback, state);
		}
		public virtual void EndClose(System.IAsyncResult result)
		{
			_InnerDuplexChannel.EndClose(result);
		}
		public virtual void Open()
		{
			_InnerDuplexChannel.Open();
		}
		public virtual void Open(System.TimeSpan timeout)
		{
			_InnerDuplexChannel.Open(timeout);
		}
		public virtual System.IAsyncResult BeginOpen(System.AsyncCallback callback, System.Object state)
		{
			return _InnerDuplexChannel.BeginOpen(callback, state);
		}
		public virtual System.IAsyncResult BeginOpen(System.TimeSpan timeout, System.AsyncCallback callback, System.Object state)
		{
			return _InnerDuplexChannel.BeginOpen(timeout, callback, state);
		}
		public virtual void EndOpen(System.IAsyncResult result)
		{
			_InnerDuplexChannel.EndOpen(result);
		}
		public virtual void Send(System.ServiceModel.Channels.Message message)
		{
			_InnerDuplexChannel.Send(message);
		}
		public virtual void Send(System.ServiceModel.Channels.Message message, System.TimeSpan timeout)
		{
			_InnerDuplexChannel.Send(message, timeout);
		}
		public virtual System.IAsyncResult BeginSend(System.ServiceModel.Channels.Message message, System.AsyncCallback callback, System.Object state)
		{
			return _InnerDuplexChannel.BeginSend(message, callback, state);
		}
		public virtual System.IAsyncResult BeginSend(System.ServiceModel.Channels.Message message, System.TimeSpan timeout, System.AsyncCallback callback, System.Object state)
		{
			return _InnerDuplexChannel.BeginSend(message, timeout, callback, state);
		}
		public virtual void EndSend(System.IAsyncResult result)
		{
			_InnerDuplexChannel.EndSend(result);
		}
	}
}
